﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace TowerDefenseXNA___Aula_1___1703
{
    class Torre : Objeto//Herança ==extends
    {
        Vector2 velocidade;
        SoundEffect efeitoSonoro;


        animacao parado;
        animacao atacada;
        public animacao andando;
        public int jogador;

        public Torre(Texture2D imagem, GameWindow Window, SoundEffect efeitoSonoro)
            :base(imagem, Window)
        {
            posicao = new Vector2(100, 100);
            velocidade = new Vector2(6, 6);
            this.efeitoSonoro = efeitoSonoro;


            andando = new animacao();
            andando.qtd_quadros = 6;
            andando.quadros_seg = 10;
            andando.Y = 36;
            andando.quadro_X = 26;
            andando.quadro_Y = 33;

            parado = new animacao();
            parado.qtd_quadros = 2;
            parado.quadros_seg = 10;
            parado.Y = 0;
            parado.quadro_X = 23;
            parado.quadro_Y = 35;

            colisao = new Rectangle((int)posicao.X, (int)posicao.Y, andando.quadro_X, andando.quadro_Y);



        }



        public bool Bateu(Objeto outro)
        {
            if(this.Colisao.Intersects(outro.Colisao))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public override void Update(GameTime gameTime)
        {
            throw new NotImplementedException();
        }
        public void Update(GameTime gameTime, KeyboardState teclado, MouseState mouse, KeyboardState teclado_anterior, MouseState mouse_anterior, GamePadState joystick, GamePadState joystick_anterior, GameWindow Window, ref int bgSourceX)
        {

            colisao.X = (int)posicao.X;
            colisao.Y = (int)posicao.Y;
            colisao.Width = andando.quadro_X;
            colisao.Height = andando.quadro_Y;

            #region blockMovePlayer
            if (jogador != 2)
            {
                //Teclado
                if (teclado.IsKeyDown(Keys.Right))
                {
                    posicao.X += velocidade.X;
                }
                if (teclado.IsKeyDown(Keys.Left))
                {
                    posicao.X -= velocidade.X;
                }
                if (teclado.IsKeyDown(Keys.Up))
                {
                    posicao.Y -= velocidade.Y;
                }
                if (teclado.IsKeyDown(Keys.Down))
                {
                    posicao.Y += velocidade.Y;
                }

                //Joystick
                if (joystick.IsButtonDown(Buttons.DPadRight))
                {
                    posicao.X += velocidade.X;
                }
                if (joystick.IsButtonDown(Buttons.DPadLeft))
                {
                    posicao.X -= velocidade.X;
                }
                if (joystick.IsButtonDown(Buttons.DPadUp))
                {
                    posicao.Y -= velocidade.Y;
                }
                if (joystick.IsButtonDown(Buttons.DPadDown))
                {
                    posicao.Y += velocidade.Y;
                }

                if (joystick.ThumbSticks.Left.X == 0 && joystick.ThumbSticks.Left.Y == 0)
                {
                    posicao.X = posicao.X;
                    posicao.Y = posicao.Y;
                }
                else
                {
                    if (joystick.ThumbSticks.Left.X > 0.1f && joystick.ThumbSticks.Left.X <= 0.7f)
                    {
                        posicao.X += velocidade.X / 2;
                    }
                    if (joystick.ThumbSticks.Left.X > 0.7f && joystick.ThumbSticks.Left.X <= 1)
                    {
                        posicao.X += velocidade.X;
                    }
                    if (joystick.ThumbSticks.Left.X < -0.1f && joystick.ThumbSticks.Left.X >= -0.7f)
                    {
                        posicao.X -= velocidade.X / 2;
                    }
                    if (joystick.ThumbSticks.Left.X < -0.7f && joystick.ThumbSticks.Left.X >= -1)
                    {
                        posicao.X -= velocidade.X;
                    }

                    if (joystick.ThumbSticks.Left.Y > 0.1f && joystick.ThumbSticks.Left.Y <= 0.7f)
                    {
                        posicao.Y -= velocidade.Y / 2;
                    }
                    if (joystick.ThumbSticks.Left.Y > 0.7f && joystick.ThumbSticks.Left.Y <= 1)
                    {
                        posicao.Y -= velocidade.Y;
                    }
                    if (joystick.ThumbSticks.Left.Y < -0.1f && joystick.ThumbSticks.Left.Y >= -0.7f)
                    {
                        posicao.Y += velocidade.Y / 2;
                    }
                    if (joystick.ThumbSticks.Left.Y < -0.7f && joystick.ThumbSticks.Left.Y >= -1)
                    {
                        posicao.Y += velocidade.Y;
                    }
                }
            }
            #endregion
            if ((this.posicao.X > (600/3)) && (this.posicao.X>0))
            {
                bgSourceX -= (int)(velocidade.X);
                this.posicao.X -= (int)(velocidade.X);
            }
            if ((this.posicao.X < (600 / 3)) && (this.posicao.X < 0))
            {
                bgSourceX += (int)(velocidade.X);
                this.posicao.X += (int)(velocidade.X);
            }

            if (posicao.X >= 600 - colisao.Width)
            {
                posicao.X = 600 - colisao.Width;
            }
            if (posicao.Y >= 480 - colisao.Height)
            {
                posicao.Y = 480 - colisao.Height;
            }
            if (posicao.X <= 0)
            {
                posicao.X = 0;
            }
            if (posicao.Y <= 0)
            {
                posicao.Y = 0;
            }
            



            if ((mouse.LeftButton == ButtonState.Pressed) /*&& !(mouse_anterior.LeftButton == ButtonState.Pressed)*/)
            {
                posicao = new Vector2(mouse.X - imagem.Width / 2, mouse.Y - imagem.Height / 2);
                efeitoSonoro.Play();
            }
        }
    }
}
